﻿/********************************** 控制器PC开发库  **********************************************
**--------------文件信息--------------------------------------------------------------------------------
**文件名: liwishell.cs
**创建人: liwi
**时间:   20230928
**版本:   1.3.9
**描述:   用户接口头文件
********************************************************************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace AIVision.PLC.LiWi
{
    public class Shell
    {
        /************************************************/
        //错误码 
        /************************************************/
        public const int ERR_OK = 0;
        public const int ERROR_OK = 0;
        public const int ERR_SUCCESS = 0;

        public enum ERR_CODE_PMC
        {
            ERR_CODE_UNKNOWN = 1,
            ERR_CODE_PARAERR = 2,
            ERR_CODE_TIMEOUT = 3,
            ERR_CODE_BUSY = 4,
            ERR_CODE_LINKTOOMANY = 5,
            ERR_CODE_OSERR = 6,
            ERR_CODE_CANNOT_OPENCOM = 7,
            ERR_CODE_CANNOT_CONNECTETH = 8,
            ERR_CODE_HANDLEERR = 9,    //链接错误
            ERR_CODE_SENDERR = 10,   //链接错误
            ERR_CODE_GFILEERR = 11,   //G文件语法错误
            ERR_CODE_FIRMWAREERR = 12,   //固件文件错误
            ERR_CODE_FILENAME_TOOLONG = 13, //文件名太长
            ERR_CODE_FIRM_MISMATCH = 14,   //固件文件不匹配
            ERR_CODE_NOTSUPPORT = 15,   //对应的卡不支持这个功能
            ERR_CODE_BUFFER_TOOSMALL = 16,  //输入的缓冲太小
            ERR_CODE_NEEDPASSWORD = 17,   //密码保护
            ERR_CODE_PASSWORD_ENTERTOOFAST = 18,//密码输入太快

            ERR_CODE_GET_LENGTHERR = 100,  //收到的数据包的长度错误， 这个测试完成后不会出现, 字符串接口时可能超过缓冲长度
            ERR_CODE_COMPILE_OFFSET = 1000, //文件编译错误

            ERR_CODE_CONTROLLERERR_OFFSET = 100000, //控制器上面传来的错误，加上这个偏移
        };

        //程序运行状态
        enum SHELL_PROGRAMSTATE
        {
            PROGRAM_STATE_STOP = 1,		//停止
            PROGRAM_STATE_RUNING = 3,	//运行
            PROGRAM_STATE_PAUSE = 5,	//暂停
            PROGRAM_STATE_ERROR = 100,	//查询的时候如果ID出错返回这个值
        };

        //任务状态
        enum SHELL_TASKSTATE
        {
            TASK_STATE_STOP = 0,	//停止
            TASK_STATE_RUNING = 1,	//运行
            TASK_STATE_PAUSE = 3,    //暂停
            TASK_STATE_ERROR = 100,  //查询的时候如果ID出错返回这个值
        };

        /*********************************************************
        函数声明
        **********************************************************/

        /*************************************************************
        Description:    //发送字符串命令到控制器 缓冲方式
        Input:          //卡链接			handle
        Input:          //字符串命令		pszCommand
        Input:			//返回的字符长度	uiResponseLength 
        Output:         //返回的字符串		psResponse
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Execute(IntPtr handle, string pszCommand, byte[] psResponse, uint uiResponseLength);

        /*************************************************************
        Description:    //发送字符串命令到控制器 直接方式
        Input:          //卡链接			handle
        Input:          //字符串命令		pszCommand
        Input:			//返回的字符长度	uiResponseLength 
        Output:         //返回的字符串		psResponse
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Command(IntPtr handle, string pszCommand, byte[] psResponse, uint uiResponseLength);

        /*************************************************************
        Description:    //与控制器建立链接， 串口方式.
        Input:          //串口号COMId 
        Output:         //卡链接phandle
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_OpenCom(uint comid, ref IntPtr phandle);

        /*************************************************************
        Description:    //可以修改缺省的波特率等设置
        uint32 dwByteSize = 8, uint32 dwParity = NOPARITY, uint32 dwStopBits = ONESTOPBIT
        windows:
        #define NOPARITY            0
        #define ODDPARITY           1
        #define EVENPARITY          2
        注意: ONESTOPBIT 不是1
        #define ONESTOPBIT          0
        #define ONE5STOPBITS        1
        #define TWOSTOPBITS         2
        linux:
        dwParity:0/1/2
        dwStopBits
        1:1个停止位
        2:2个停止位
        Input:          //dwBaudRate 波特率
                        dwByteSize   数据位 
                        dwParity = NOPARITY,校验位 
                        dwStopBits = ONESTOPBIT停止位
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetComDefaultBaud(uint dwBaudRate, uint dwByteSize, uint dwParity, uint dwStopBits);

        /*************************************************************
        Description:    //修改控制器IP地址
        Input:          //卡链接handle 
        Input:          //IP地址  
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetIp(IntPtr handle, string ipaddress);

        /*************************************************************
        Description:    //读取当前控制器的IP地址, 注意:当设置dhcp以后，设置的IP与实际的不一致。
        Input:          //卡链接handle 
        Output:         //IP地址  
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetIp(IntPtr handle, byte[] ipaddress);

        /*************************************************************
        Description:    //与控制器建立链接 ModbusTCP
        Input:          //IP地址，字符串的方式输入
        Output:         //卡链接handle
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_OpenEth(string ipaddr, ref IntPtr phandle);

        /*************************************************************
        Description:    //与控制器建立链接 ModbusRTU
        Input:          //IP地址，字符串的方式输入
        Output:         //卡链接handle
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_OpenEthModbusRTU(string ipaddr, ref IntPtr phandle);

        /*************************************************************
        Description:    //快速检索IP列表
        Input:          //uims 响应时间
        Input:          //addrbufflength		最大长度
        output:			//ipaddrlist		    IP列表
        Return:         //错误码, ERR_OK表示有搜索到.
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SearchEthlist(byte[] ipaddrlist, uint addrbufflength, uint uims);

        /*************************************************************
        Description:    //快速检索控制器
        Input:          //控制器IP地址
        Input:          //响应时间
        Output:         //
        Return:         //错误码, ERR_OK表示有搜索到.
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SearchEth(string ipaddress, uint uims);

        /*************************************************************
        Description：读取网络连接信息间隔时间，超过自动断开
        Input：卡链接handle
        Output：时间,单位:S
        Return：错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetEthNoLinkTime(IntPtr handle, ref uint psec);

        /*************************************************************
        Description：设置网络连接信息间隔时间，超过自动断开
        Input：卡链接handle
        Input： 时间,单位:S
        Output：
        Return：错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetEthNoLinkTime(IntPtr handle, uint usec);

        /*************************************************************
        Description:    //关闭控制器链接
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Close(IntPtr handle);

        /*************************************************************
        Description:    //继续运行BAS项目
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Resume(IntPtr handle);

        /*************************************************************
        Description:    //暂停运行BAS项目
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Pause(IntPtr handle);

        /*************************************************************
        Description:    //停止运行BAS项目
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Stop(IntPtr handle);

        /*************************************************************
        Description:    //命令的延时等待时间
        Input:          //卡链接handle
        Input:          //timems 连接的等待时间，单位毫秒
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetTimeOut(IntPtr handle, uint timems);

        /*************************************************************
        Description:    //命令的延时等待时间
        Input:          //卡链接handle
        Output:         //ptimems 连接的等待时间，单位毫秒
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetTimeOut(IntPtr handle, ref uint ptimems);

        /*************************************************************
        Description:    //读取系统状态
        Input:          //卡链接handle
        Output:         //状态 SHELL_PROGRAMSTATE
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetState(IntPtr handle, ref byte pstate);

        /*************************************************************
        Description:    //读取链接控制器的轴数
        Input:          //卡链接handle
        Output:         //轴数
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMaxAxis(IntPtr handle, ref int pmaxAxis);

        /*************************************************************
        Description:    //BAS或LWB文件下载到控制器运行
        Input:          //卡链接handle
        Input:          //Filename BAS或LWB文件路径
        Input:          //RAM-ROM  0-RAM  1-ROM
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BasDown(IntPtr handle, string Filename, uint run_mode);

        /*************************************************************
        说明：运行
        输入：卡链接handle 文件名， 当为NULL的时候运行缺省文件
        输出：
        返回值：错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_RunBasFile(IntPtr handle, string pfilenameinControl);

        /*************************************************************
        Description:    //读取输入信号
        Input:          //卡链接handle
                        ionum IN编号
        Output:         //piValue 输入口状态
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetIn(IntPtr handle, int ionum, ref uint piValue);

        /*************************************************************
        Description:	//读全部输入口
        Input:			//卡链接handle 
        Output:			//pIoState：0-无效， 1- 有效
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetInAll(IntPtr handle, ref uint pIoState);

        /*************************************************************
        Description:    //打开输出信号
        Input:          //卡链接handle 
                        ionum 输出口编号
                        iValue	输出口状态
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetOp(IntPtr handle, int ionum, uint iValue);

        /*************************************************************
        Description:    //读取输出口状态
        Input:          //卡链接handle
                        ionum 输出口编号
        Output:         //piValue 输出口状态
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetOp(IntPtr handle, int ionum, ref uint piValue);

        /*************************************************************
        Description:    //读取模拟量输入信号
        Input:          //卡链接handle 
                        ionum AIN口编号			
        Output:         //pfValue 返回的模拟量值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetAD(IntPtr handle, int ionum, ref float pfValue);

        /*************************************************************
        Description:    //打开模拟量输出信号
        Input:          //卡链接handle
                        ionum DA输出口编号
                        fValue 设定的模拟量值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetDA(IntPtr handle, int ionum, float fValue);

        /*************************************************************
        Description:    //读取模拟输出口状态
        Input:          //卡链接handle
                        ionum 模拟量输出口编号
        Output:         //pfValue 读取的的模拟量值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetDA(IntPtr handle, int ionum, ref float pfValue);

        /*************************************************************
        Description:    //设置输入口反转
        Input:          //卡链接handle
                         ionum 输入口编号
                         bifInvert 反转状态 0/1
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetInvertIn(IntPtr handle, int ionum, int bifInvert);

        /*************************************************************
        Description:    //读取输入口反转状态
        Input:          //卡链接handle
                        ionum 输入口编号
        Output:         //piValue 反转状态
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetInvertIn(IntPtr handle, int ionum, ref int piValue);

        /*************************************************************
        Description:    //设置pwm频率
        Input:          //卡链接handle
                        ionum PWM编号口
                        fValue 频率 硬件PWM1M 软PWM 2K
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetPwmFreq(IntPtr handle, int ionum, float fValue);

        /*************************************************************
        Description:    //读取pwm频率
        Input:          //卡链接handle
                        ionum PWM口编号
        Output:         //pfValue 返回的频率
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetPwmFreq(IntPtr handle, int ionum, ref float pfValue);

        /*************************************************************
        Description:    //设置pwm占空比
        Input:          //卡链接handle
                        ionum PWM口编号
                        fValue 占空比	0-1  0表示关闭PWM口
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetPwmDuty(IntPtr handle, int ionum, float fValue);

        /*************************************************************
        Description:    //读取pwm占空比
        Input:          //卡链接handle
                        ionum PWM口编号
        Output:         //pfValue 读取的占空比
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetPwmDuty(IntPtr handle, int ionum, ref float pfValue);

        /*************************************************************
        说明：读取参数，可以一次读多个
        输入： handle：卡链接handle
               paraId： 参数Id
               paraNum：参数个数
        输出：
        返回值：错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_ReadDrawParaList(IntPtr handle, ushort[] paraId, ushort[] paraIndex, int paraNum, long[] pValue, ref int pValueNum);

        /*************************************************************
        说明：读取Cmd类型
        输入： handle：卡链接handle
        输出：
        返回值：错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetParaCmdType(IntPtr handle, ref byte pParaCmdType);

        /*************************************************************
        Description:    //参数 快速读取多个输入
        Input:          //卡链接handle
                        ionumfirst IN起始编号
                        ionumend	IN结束编号
        Output:         //pValueList 位状态 按位存储
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetModbusIn(IntPtr handle, int ionumfirst, int ionumend, byte[] pValueList);

        /*************************************************************
        Description:    //参数 快速读取多个当前的输出状态
        Input:          //卡链接handle
                        ionumfirst IN起始编号
                        ionumend	IN结束编号
        Output:         //pValueList 位状态 按位存储
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetModbusOut(IntPtr handle, int ionumfirst, int ionumend, byte[] pValueList);

        /*************************************************************
        Description:    //参数 快速读取多个当前的DPOS
        Input:          //卡链接handle
                        imaxaxises 轴数量
        Output:         //pValueList 读取的坐标值 从轴0开始
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetModbusDpos(IntPtr handle, int imaxaxises, float[] pValueList);

        /*************************************************************
        Description:    //参数 快速读取多个当前的MPOS
        Input:          //卡链接handle 
                        imaxaxises 轴数量
        Output:         //pValueList 读取的反馈坐标值 从轴0开始
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetModbusMpos(IntPtr handle, int imaxaxises, float[] pValueList);

        /*************************************************************
        Description:    //参数 快速读取多个当前的速度
        Input:          //卡链接handle
                        imaxaxises 轴数量
        Output:         //pValueList 读取的当前速度 从轴0开始
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetModbusCurSpeed(IntPtr handle, int imaxaxises, float[] pValueList);

        /*************************************************************
        Description:    //通用的参数修改函数 sParam: 填写参数名称
        Input:          //卡链接handle 
                        sParam 轴参数名称 "DPOS" ...
                        iaxis 轴号
                        fset 设定值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetParam(IntPtr handle, string sParam, int iaxis, float fset);

        /*************************************************************
        Description:    //参数 通用的参数读取函数, sParam:填写参数名称
        Input:          //卡链接handle
                        sParam 轴参数名称 "DPOS" ...
                        iaxis 轴号
        Output:         //pfValue  读取的返回值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetParam(IntPtr handle, string sParam, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置加速度
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue  设定值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetAccel(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取加速度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 加速度返回值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetAccel(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取叠加轴
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //读取的轴叠加轴号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetAddax(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置轴告警信号
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 报警信号输入口编号，取消时设定-1
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetAlmIn(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取告警信号
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 报警信号输入口返回值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetAlmIn(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置轴类型
        Input:          //卡链接handle 
                        iaxis 轴号
                        iValue 轴类型
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetAtype(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取轴类型
        Input:          //卡链接handle 
                        iaxis 轴号
        Output:         //iValue 轴类型返回值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetAtype(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //读取轴状态
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //轴状态返回值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetAxisStatus(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置轴地址
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 轴地址设定值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetAxisAddress(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取轴地址
        Input:          //卡链接handle
                        iaxis 轴号 
        Output:         //piValue 轴地址返回值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetAxisAddress(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置轴使能
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 状态 0-关闭 1- 打开
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetAxisEnable(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取轴使能状态
        Input:          //卡链接handle 
                        iaxis 轴号
        Output:         //piValue 返回的使能状态
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetAxisEnable(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置链接速率
        Input:          //卡链接handle 
                        iaxis 轴号
                        fValue 同步连接速率
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetClutchRate(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取链接速率
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 连接速率返回值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetClutchRate(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置拐角减速
        Input:          //卡链接handle 
                        iaxis 轴号
                        iValue 拐角减速模式
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetCornerMode(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取拐角减速
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回的拐角模式
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetCornerMode(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置回零爬行速度
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue设置的速度值
        Output:         //	
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetCreep(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取回零爬行速度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的爬行速度值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetCreep(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置原点信号   设定-1为取消原点设置
        Input:          //卡链接handle 
                        iaxis 轴号
                        iValue 设置的原点信号输入口编号
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetDatumIn(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取原点信号
        Input:          //卡链接handle
                        iaxis 
        Output:         //piValue 返回原点输入口编号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetDatumIn(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置减速度
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设置的减速度值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetDecel(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取减速度
        Input:          //卡链接handle 
                        iaxis 轴号
        Output:         //pfValue 设定的减速度返回值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetDecel(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置拐角减速角度，开始减速角度，单位为弧度
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设置的拐角减速角度
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetDecelAngle(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取拐角开始减速角度，单位为弧度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的拐角减速角度
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetDecelAngle(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置轴位置
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设置的坐标值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetDpos(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取轴位置
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的命令位置坐标
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetDpos(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取内部编码器值  （总线绝对值伺服时为绝对值位置）
        Input:          //卡链接handle
                        iaxis 轴号		
        Output:         //pfValue 返回的内部编码器值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetEncoder(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取当前运动的最终位置
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的最终位置
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetEndMove(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取当前和缓冲中运动的最终位置，可以用于相对绝对转换
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的最终位置
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetEndMoveBuffer(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置SP运动的结束速度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //fValue 设定的速度值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetEndMoveSpeed(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取SP运动的结束速度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的速度值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetEndMoveSpeed(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置快速JOG输入
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 快速JOG输入口编号
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetFastJog(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取快速JOG输入
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //返回的JOG输入口编号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetFastJog(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置快速减速度
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设定的快速减速度
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetFastDec(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取快速减速度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的快速减速度
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetFastDec(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取随动误差
        Input:          //卡链接handle 
                        iaxis 轴号
        Output:         //pfValue 返回的随动误差
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetFe(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置保持输入
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 设置的输入口编号
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetFholdIn(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取保持输入
        Input:          //卡链接handle 
                        iaxis 轴号
        Output:         //piValue 返回输入HOLDIN输入口编号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetFholdIn(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置轴保持速度
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设置的速度值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetFhspeed(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取轴保持速度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的保持速度
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetFhspeed(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置SP运动的运行速度
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设置的速度值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetForceSpeed(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取SP运动的运行速度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回SP运动速度值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetForceSpeed(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置正向软限位		取消时设置一个较大值即可
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设定的限位值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetFsLimit(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取正向软限位
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的正向限位坐标
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetFsLimit(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置小圆限速最小半径
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设置的最小半径
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetFullSpRadius(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取小圆限速最小半径
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的限速半径
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetFullSpRadius(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置正向硬限位输入  设置成-1时表示不设置限位
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 设置的限位输入口编号
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetFwdIn(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取正向硬限位输入
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回正向限位输入口编号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetFwdIn(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置正向JOG输入
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 设置的JOG输入口编号
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetFwdJog(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取正向JOG输入
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回的JOG输入口编号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetFwdJog(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //读取轴是否运动结束
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回运行状态 0-运动中 -1 停止
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetIfIdle(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置脉冲输出模式
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 设定的脉冲输出模式 脉冲+方向/双脉冲
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetInvertStep(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取脉冲输出模式
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回的脉冲模式
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetInvertStep(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置插补时轴是否参与速度计算，缺省参与（1）。此参数只对直线和螺旋的第三个轴起作用
        Input:          //卡链接handle
                        iaxis	轴号
                        iValue 模式 0-不参数 1-参与
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetInterpFactor(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取插补时轴是否参与速度计算，缺省参与（1）。此参数只对直线和螺旋的第三个轴起作用
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回的速度计算模式
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetInterpFactor(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置JOG时速度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //fValue 设定的速度值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetJogSpeed(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取JOG时速度
        Input:          //卡链接handle
                        iaxis	轴号
        Output:         //pfValue 返回的JOG速度值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetJogSpeed(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取当前链接运动的参考轴号
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回链接的参考轴号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetLinkax(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //读取当前除了当前运动是否还有缓冲 
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回状态值  -1 没有剩余函数 0-还有剩余运动
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetLoaded(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置轴起始速度
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetLspeed(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取轴起始速度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的起始速度值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetLspeed(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置回零反找等待时间
        Input:          //卡链接handle 
                        iaxis 轴号
                        iValue 回零反找等待时间 MS
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetHomeWait(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取回零反找等待时间
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回的反找等待时间
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetHomeWait(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //读取编码器锁存示教返回状态
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue  返回的锁存触发状态 -1-锁存触发 0-未触发
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMark(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //读取编码器锁存示教返回状态
        Input:          //卡链接handle
        iaxis 轴号
        Output:         //piValue  返回的锁存触发状态 -1-锁存触发 0-未触发
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMarkB(IntPtr handle, int iaxis, ref int piValue);

        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMarkC(IntPtr handle, int iaxis, ref int piValue);

        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMarkD(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置脉冲输出最高频率
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 设置的最高脉冲频率
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetMaxSpeed(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取脉冲输出最高频率
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回的脉冲频率
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMaxSpeed(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置连续插补
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue	连续插补开关 0-关闭连续插补 1-打开连续插补
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetMerge(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取连续插补状态
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回的连续插补开关状态
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMerge(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //读取当前被缓冲起来的运动个数
        Input:          //卡链接handle
                        iaxis 轴数
        Output:         //piValue 缓冲运动数
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMovesBuffered(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置当前正在运动指令的MOVE_MARK标号
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetMoveCurmark(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取当前正在运动指令的MOVE_MARK标号
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 当前MARK标号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMoveCurmark(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //读取运动指令的MOVE_MARK标号
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMovemark(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置运动指令的MOVE_MARK标号 每当有运动进入轴运动缓冲时MARK自动+1
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 设定的MARK值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetMovemark(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //设置反馈位置
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设置的反馈位置
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetMpos(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取反馈位置
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的轴反馈位置坐标
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMpos(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取反馈速度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的编码器反馈速度
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMspeed(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取当前正在运动指令类型
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回当前的运动类型
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetMtype(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置修改偏移位置
        Input:          //卡链接handle 
                        iaxis 轴号
                        fValue 设置的偏移值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetOffpos(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取修改偏移位置
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的偏移坐标值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetOffpos(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取返回锁存的测量反馈位置(MPOS)
        Input:          //卡链接handle 
                        iaxis 轴号
        Output:         //pfValue 锁存的坐标位置
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRegPos(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取返回锁存的测量反馈位置(MPOS)
        Input:          //卡链接handle 
        iaxis 轴号
        Output:         //pfValue 锁存的坐标位置
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRegPosB(IntPtr handle, int iaxis, ref float pfValue);

        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRegPosC(IntPtr handle, int iaxis, ref float pfValue);

        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRegPosD(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取返回轴当前运动还未完成的距离
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的剩余距离
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRemain(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //参数  轴剩余的缓冲, 按直线段来计算
                          REMAIN_BUFFER为唯一一个可以加AXIS并用PMCCommand获取的.
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 剩余的直线缓冲数量
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRemain_LineBuffer(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //参数  轴剩余的缓冲, 按最复杂的空间圆弧来计算
                          REMAIN_BUFFER为唯一一个可以加AXIS并用PMCCommand获取的.
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 剩余的缓冲数量
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRemain_Buffer(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置当前矢量距离。
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetVectorMoved(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取当前矢量距离。
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetVectorMoved(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置根据REP_OPTION设置来自动循环轴DPOS和MPOS坐标。
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue	设置的坐标值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetRepDist(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //设置坐标重复设置
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 模式
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetRepOption(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取坐标重复设置
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回的模式
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRepOption(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //读取根据REP_OPTION设置来自动循环轴DPOS和MPOS坐标。
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRepDist(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置负向硬件限位开关对应的输入点编号，-1无效。
        Input:          //卡链接handle
                        iaxis  轴号
                        iValue 设置的输入口编号
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetRevIn(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取负向硬件限位开关对应的输入点编号，-1无效。
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回的负向限位输入口编号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRevIn(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置负向JOG输入对应的输入点编号，-1无效。
        Input:          //卡链接handle
                        iaxis 轴号
                        iValue 设置的输入口编号
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetRevJog(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //读取负向JOG输入对应的输入点编号，-1无效。
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回的输入口编号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRevJog(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置负向软限位位置。  设置一个较大的值时认为取消限位
        Input:          //卡链接handle
                        iaxis	轴号
                        fValue  负向限位值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetRsLimit(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取负向软限位位置。
        Input:          //卡链接handle
                        iaxis	轴号
        Output:         //pfValue 设定的限位值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetRsLimit(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置轴速度，单位为units/s，当多轴运动时，作为插补运动的速度
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设置的速度值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetSpeed(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取轴速度，单位为units/s，当多轴运动时，作为插补运动的速度
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的速度值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetSpeed(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置 S曲线设置。 0-梯形加减速
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue S曲线平滑时间MS
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetSramp(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取 S曲线设置。
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 平滑时间
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetSramp(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置 自定义速度的SP运动的起始速度
        Input:          //卡链接handle 
                        iaxis 轴号
                        fValue 设置的速度值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetStartMoveSpeed(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取自定义速度的SP运动的起始速度
        Input:          //卡链接handle
                        iaxis	轴号
        Output:         //pfValue 返回的SP运动起始速度值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetStartMoveSpeed(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置 减速到最低的最小拐角 弧度制
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设置的角度值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetStopAngle(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取减速到最低的最小拐角 弧度制
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的拐角停止角度
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetStopAngle(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //设置 脉冲当量
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 设置的当量值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetUnits(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取脉冲当量
        Input:          //卡链接handle
                        iaxis	轴号
        Output:         //pfValue 返回的脉冲当量
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetUnits(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取返回轴当前当前运动和缓冲运动还未完成的距离
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //pfValue 返回的阵雨距离
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetVectorBuffered(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取轴的矢量长度（PMC_SetVectorMoved函数清零轴的矢量长度后开始计算轴的矢量长度），如是多轴插补（iaxis为插补轴的第一个轴）则读取多轴的矢量长度之和
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetVectorTotal(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //读取当前轴运行的命令速度
        Input:          //卡链接handle
                        iaxis	轴号
        Output:         //pfValue	返回的当前速度值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetVpSpeed(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //全局变量读取, 也可以是参数等等
        Input:          //卡链接handle
                        pname 全局变量名称/或者指定轴号的轴参数名称DPOS(0)
        Output:         //pfValue 返回值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetVariablef(IntPtr handle, string pname, float[] pfValue, ref int pValueNum);

        /*************************************************************
        Description:    //全局变量读取, 也可以是参数等等
        Input:          //卡链接handle
                        pname 全局变量名称/或者指定轴号的轴参数名称DPOS(0)
        Output:         //piValue 返回值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetVariableInt(IntPtr handle, string pname, int maxValue, int[] piValue, ref int pValueNum);

        /*************************************************************
        Description:    //BASE指令调用

        仅仅修改在线命令的BASE列表，不对控制器的运行任务的BASE进行修改.
        修改后，后续的所有MOVE等指令都是以这个BASE为基础  
        Input:          //卡链接handle
                        imaxaxises 参与轴数
                        piAxislist	轴列表
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Base(IntPtr handle, int imaxaxises, int[] piAxislist);

        /*************************************************************
        Description:    //定义DPOS,不建议使用，可以直接调用SETDPOS达到同样效果
        Input:          //卡链接handle
                        iaxis	轴号
                        pfDpos 设置的坐标值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Defpos(IntPtr handle, int iaxis, float pfDpos);

        /*************************************************************
        Description:    //多轴相对直线插补
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        pfDisancelist		距离列表
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Move(IntPtr handle, int imaxaxises, int[] piAxislist, float[] pfDisancelist);

        /*************************************************************
        Description:    //相对多轴直线插补SP运动 
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        pfDisancelist		距离列表
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveSp(IntPtr handle, int imaxaxises, int[] piAxislist, float[] pfDisancelist);

        /*************************************************************
        Description:    //绝对多轴直线插补
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        pfDisancelist		距离列表
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveAbs(IntPtr handle, int imaxaxises, int[] piAxislist, float[] pfDisancelist);

        /*************************************************************
        Description:    //绝对多轴直线插补SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        pfDisancelist		距离列表
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveAbsSp(IntPtr handle, int imaxaxises, int[] piAxislist, float[] pfDisancelist);

        /*************************************************************
        Description:    //运动中修改结束位置
        Input:          //卡链接handle
                        imaxaxises			轴数量
                        pfDisancelist		距离列表
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveModify(IntPtr handle, int imaxaxises, float[] pfDisancelist);

        /*************************************************************
        Description:    //相对圆心定圆弧插补运动 
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第一个轴运动坐标
                        end2              第二个轴运动坐标
                        centre1    第一个轴运动圆心，相对与起始点。
                        centre2    第二个轴运动圆心，相对与起始点。
                        direction  0-逆时针，1-顺时针
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCirc(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection);

        /*************************************************************
        Description:    //相对圆心定圆弧插补运动 插补SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第一个轴运动坐标
                        end2              第二个轴运动坐标
                        centre1    第一个轴运动圆心，相对与起始点。
                        centre2    第二个轴运动圆心，相对与起始点。
                        direction  0-逆时针，1-顺时针
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCircSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection);

        /*************************************************************
        Description:    //绝对圆心圆弧插补运动 无法画整圆
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第一个轴运动坐标，绝对位置
                        end2              第二个轴运动坐标，绝对位置
                        centre1    第一个轴运动圆心，绝对位置
                        centre2    第二个轴运动圆心，绝对位置
                        direction  0-逆时针，1-顺时针
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCircAbs(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection);

        /*************************************************************
        Description:    //绝对圆心圆弧插补SP运动 无法画整圆
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第一个轴运动坐标，绝对位置
                        end2              第二个轴运动坐标，绝对位置
                        centre1    第一个轴运动圆心，绝对位置
                        centre2    第二个轴运动圆心，绝对位置
                        direction  0-逆时针，1-顺时针
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCircAbsSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection);

        /*************************************************************
        Description:    //相对3点定圆弧插补运动 
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        mid1       第一个轴中间点，相对起始点距离
                        mid2       第二个轴中间点，相对起始点距离
                        end1              第一个轴结束点，相对起始点距离
                        end2              第二个轴结束点，相对起始点距离
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCirc2(IntPtr handle, int imaxaxises, int[] piAxislist, float fmid1, float fmid2, float fend1, float fend2);

        /*************************************************************
        Description:    //绝对3点定圆弧插补运动 
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        mid1       第一个轴中间点，绝对位置
                        mid2       第二个轴中间点，绝对位置
                        end1              第一个轴结束点，绝对位置
                        end2              第二个轴结束点，绝对位置 
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCirc2Abs(IntPtr handle, int imaxaxises, int[] piAxislist, float fmid1, float fmid2, float fend1, float fend2);

        /*************************************************************
        Description:    //相对3点定圆弧插补SP运动
        Input:          //卡链接handle
                        imaxaxises	参与运动总轴数
                        piAxislist	轴号列表
                        mid1       第一个轴中间点，相对起始点距离
                        mid2       第二个轴中间点，相对起始点距离
                        end1       第一个轴结束点，相对起始点距离
                        end2       第二个轴结束点，相对起始点距离
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCirc2Sp(IntPtr handle, int imaxaxises, int[] piAxislist, float fmid1, float fmid2, float fend1, float fend2);

        /*************************************************************
        Description:    //绝对3点定圆弧插补SP运动 
        Input:          //卡链接handle
                        imaxaxises	参与运动总轴数
                        piAxislist	轴号列表
                        mid1       第一个轴中间点，绝对位置
                        mid2       第二个轴中间点，绝对位置
                        end1       第一个轴结束点，绝对位置
                        end2       第二个轴结束点，绝对位置 
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCirc2AbsSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fmid1, float fmid2, float fend1, float fend2);

        /*************************************************************
        Description:    //相对半径方向定圆弧插补
        Input:          //卡链接handle
                        imaxaxises	参与运动总轴数
                        piAxislist	轴号列表
                        end1        第一个轴结束点，相对位置
                        end2        第二个轴结束点，相对位置 
                        fradius     圆弧半径，单位是UNITS。radius >0 优弧  <0 劣弧
                        idirection  圆弧运动方向。0为逆时针方向，1为顺时针方向。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCirc3(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fradius, int idirection);

        /*************************************************************
        Description:    //绝对半径方向定圆弧插补
        Input:          //卡链接handle
                        imaxaxises	参与运动总轴数
                        piAxislist	轴号列表
                        end1        第一个轴结束点，相对位置
                        end2        第二个轴结束点，相对位置 
                        fradius     圆弧半径，单位是UNITS。radius >0 优弧  <0 劣弧
                        idirection  圆弧运动方向。0为逆时针方向，1为顺时针方向。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCirc3Abs(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fradius, int idirection);

        /*************************************************************
        Description:    //相对半径方向定圆弧插补SP运动 
        Input:          //卡链接handle
                        imaxaxises	参与运动总轴数
                        piAxislist	轴号列表
                        end1        第一个轴结束点，绝对位置
                        end2        第二个轴结束点，绝对位置 
                        fradius     圆弧半径，单位是UNITS。radius >0 优弧  <0 劣弧
                        idirection  圆弧运动方向。0为逆时针方向，1为顺时针方向。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCirc3Sp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fradius, int idirection);

        /*************************************************************
        Description:    //绝对半径方向定圆弧插补SP运动 
        Input:          //卡链接handle
                        imaxaxises	参与运动总轴数
                        piAxislist	轴号列表
                        end1        第一个轴结束点，绝对位置
                        end2        第二个轴结束点，绝对位置 
                        fradius     圆弧半径，单位是UNITS。radius >0 优弧  <0 劣弧
                        idirection  圆弧运动方向。0为逆时针方向，1为顺时针方向。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveCirc3AbsSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fradius, int idirection);

        /*************************************************************
        Description:    //相对3轴圆心螺旋插补运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第一个轴运动坐标
                        end2              第二个轴运动坐标
                        centre1    第一个轴运动圆心，相对与起始点
                        centre2    第二个轴运动圆心，相对与起始点		
                        direction  0-逆时针，1-顺时针
                        distance3第三个轴运动距离。
                        mode      第三轴的速度计算:0(缺省)第三轴参与速度计算。1第三轴不参与速度计算。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MHelical(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fDistance3, int imode);

        /*************************************************************
        Description:    //绝对3轴圆心螺旋插补运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第一个轴运动坐标
                        end2              第二个轴运动坐标
                        centre1    第一个轴运动圆心坐标
                        centre2    第二个轴运动圆心坐标
                        direction  0-逆时针，1-顺时针
                        distance3第三个轴运动距离。
                        mode      第三轴的速度计算:0(缺省) 第三轴参与速度计算。1第三轴不参与速度计算。
        Output:         //
         Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MHelicalAbs(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fDistance3, int imode);

        /*************************************************************
        Description:    //相对3轴圆心螺旋插补SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第一个轴运动坐标
                        end2              第二个轴运动坐标
                        centre1    第一个轴运动圆心，相对与起始点	  
                        centre2    第二个轴运动圆心，相对与起始点		
                        direction  0-逆时针，1-顺时针  
                        distance3第三个轴运动距离。
                      mode      第三轴的速度计算: 0(缺省)第三轴参与速度计算。 1第三轴不参与速度计算。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MHelicalSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fDistance3, int imode);

        /*************************************************************
        Description:    //绝对3轴圆心螺旋插补SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第一个轴运动坐标
                        end2              第二个轴运动坐标
                        centre1    第一个轴运动圆心坐标
                        centre2    第二个轴运动圆心坐标
                        direction  0-逆时针，1-顺时针
                        distance3第三个轴运动距离。
                        mode      第三轴的速度计算:0(缺省) 第三轴参与速度计算。1第三轴不参与速度计算。
        Output:         //
         Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MHelicalAbsSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fDistance3, int imode);

        /*************************************************************
        Description:    //相对3轴 3点画螺旋插补运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        mid1       第一个轴中间点  
                        mid2       第二个轴中间点	
                        end1              第一个轴结束点	  
                        end2              第二个轴结束点		
                        distance3第三个轴运动距离		  
                        mode      第三轴的速度计算:			
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MHelical2(IntPtr handle, int imaxaxises, int[] piAxislist, float fmid1, float fmid2, float fend1, float fend2, float fDistance3, int imode);

        /*************************************************************
        Description:    //绝对3轴 3点画螺旋插补运动
        Input:          //卡链接handle
                    imaxaxises			参与运动总轴数
                    piAxislist			轴号列表
                    mid1       第一个轴中间点
                    mid2       第二个轴中间点
                    end1              第一个轴结束点
                    end2              第二个轴结束点
                    distance3   第三个轴运动结束点
                    mode      第三轴的速度计算:
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MHelical2Abs(IntPtr handle, int imaxaxises, int[] piAxislist, float fmid1, float fmid2, float fend1, float fend2, float fDistance3, int imode);

        /*************************************************************
        Description:    //相对3轴 3点画螺旋插补SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        mid1       第一个轴中间点  
                        mid2       第二个轴中间点	
                        end1              第一个轴结束点	  
                        end2              第二个轴结束点		
                        distance3第三个轴运动距离		  
                        mode      第三轴的速度计算:			
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MHelical2Sp(IntPtr handle, int imaxaxises, int[] piAxislist, float fmid1, float fmid2, float fend1, float fend2, float fDistance3, int imode);

        /*************************************************************
        Description:    //绝对3轴 3点画螺旋插补SP运动 
        Input:          //卡链接handle
                    imaxaxises			参与运动总轴数
                    piAxislist			轴号列表
                    mid1       第一个轴中间点
                    mid2       第二个轴中间点
                    end1              第一个轴结束点
                    end2              第二个轴结束点
                    distance3   第三个轴运动结束点
                    mode      第三轴的速度计算:
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MHelical2AbsSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fmid1, float fmid2, float fend1, float fend2, float fDistance3, int imode);

        /*************************************************************
        Description:    //相对椭圆插补
        Input:          //卡链接handle
                    imaxaxises			参与运动总轴数
                    piAxislist			轴号列表
                    fend1              终点第一个轴运动坐标，相对于起始点。
                    fend2              终点第二个轴运动坐标，相对于起始点。
                    fcenter1    中心第一个轴运动坐标，相对于起始点。
                    fcenter2    中心第二个轴运动坐标，相对于起始点。
                    idirection  0-逆时针，1-顺时针
                    fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                    fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MEclipse(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis);

        /*************************************************************
        Description:    //绝对椭圆插补
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        fend1              终点第一个轴运动坐标
                        fend2              终点第二个轴运动坐标
                        fcenter1    中心第一个轴运动坐标。
                        fcenter2    中心第二个轴运动坐标。
                        idirection  0-逆时针，1-顺时针
                        fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                        fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。

          Output:         //
          Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MEclipseAbs(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis);

        /*************************************************************
        Description:    //相对椭圆插补SP运动
        Input:          //卡链接handle
                    imaxaxises			参与运动总轴数
                    piAxislist			轴号列表
                    fend1              终点第一个轴运动坐标，相对于起始点。
                    fend2              终点第二个轴运动坐标，相对于起始点。
                    fcenter1    中心第一个轴运动坐标，相对于起始点。
                    fcenter2    中心第二个轴运动坐标，相对于起始点。
                    idirection  0-逆时针，1-顺时针
                    fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                    fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MEclipseSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis);

        /*************************************************************
        Description:    //绝对椭圆插补SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        fend1              终点第一个轴运动坐标
                        fend2              终点第二个轴运动坐标
                        fcenter1    中心第一个轴运动坐标。
                        fcenter2    中心第二个轴运动坐标。
                        idirection  0-逆时针，1-顺时针
                        fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                        fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。

          Output:         //
          Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MEclipseAbsSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis);

        /*************************************************************
        Description:    //相对椭圆 + 螺旋插补运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        fend1              终点第一个轴运动坐标，相对于起始点。
                        fend2              终点第二个轴运动坐标，相对于起始点。
                        fcenter1    中心第一个轴运动坐标，相对于起始点。
                        fcenter2    中心第二个轴运动坐标，相对于起始点。
                        idirection  0-逆时针，1-顺时针
                        fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                        fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。
                        fDistance3	第三个轴的运动距离
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MEclipseHelical(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fDistance3);

        /*************************************************************
        Description:    //相对椭圆 + 螺旋插补SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        fend1              终点第一个轴运动坐标，相对于起始点。
                        fend2              终点第二个轴运动坐标，相对于起始点。
                        fcenter1    中心第一个轴运动坐标，相对于起始点。
                        fcenter2    中心第二个轴运动坐标，相对于起始点。
                        idirection  0-逆时针，1-顺时针
                        fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                        fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。
                        fDistance3	第三个轴的运动距离
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MEclipseHelicalSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fDistance3);

        /*************************************************************
        Description:    //绝对椭圆 + 螺旋插补运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        fend1              终点第一个轴运动坐标
                        fend2              终点第二个轴运动坐标
                        fcenter1    中心第一个轴运动坐标。
                        fcenter2    中心第二个轴运动坐标。
                        idirection  0-逆时针，1-顺时针
                        fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                        fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。
                        fDistance3	第三个轴的运动距离
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MEclipseHelicalAbs(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fDistance3);

        /*************************************************************
        Description:    //绝对椭圆 + 螺旋插补SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        fend1              终点第一个轴运动坐标
                        fend2              终点第二个轴运动坐标
                        fcenter1    中心第一个轴运动坐标。
                        fcenter2    中心第二个轴运动坐标。
                        idirection  0-逆时针，1-顺时针
                        fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                        fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。
                        fDistance3	第三个轴的运动距离
          Output:         //
          Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MEclipseHelicalAbsSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fDistance3);

        /*************************************************************
        Description:    //相对椭圆 + 螺旋多圈插补
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        fcenter1    中心第一个轴运动坐标。
                        fcenter2    中心第二个轴运动坐标。
                        idirection  0-逆时针，1-顺时针
                        fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                        fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。
                        fCircles    正数 - 逆时针，负数 - 顺时针，不能为0，圈数可以为小数。
                        fDistance3	第三个轴的运动距离
                        imode      第三轴的速度计算:
          Output:         //
          Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Tangle(IntPtr handle, int imaxaxises, int[] piAxislist, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fCircles, float fDistance3, int imode);

        /*************************************************************
        Description:    //相对椭圆 + 螺旋多圈插补SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        fcenter1    中心第一个轴运动坐标。
                        fcenter2    中心第二个轴运动坐标。
                        idirection  0-逆时针，1-顺时针
                        fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                        fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。
                        fCircles    正数 - 逆时针，负数 - 顺时针，不能为0，圈数可以为小数。
                        fDistance3	第三个轴的运动距离
                        imode      第三轴的速度计算:
          Output:         //
          Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_TangleSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fCircles, float fDistance3, int imode);

        /*************************************************************
        Description:    //绝对椭圆 + 螺旋多圈插补
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        fcenter1    中心第一个轴运动绝对坐标。
                        fcenter2    中心第二个轴运动绝对坐标。
                        idirection  0-逆时针，1-顺时针
                        fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                        fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。
                        fCircles    正数 - 逆时针，负数 - 顺时针，不能为0，圈数可以为小数。
                        fDistance3	第三个轴的运动距离
                        imode      第三轴的速度计算:
          Output:         //
          Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_TangleAbs(IntPtr handle, int imaxaxises, int[] piAxislist, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fCircles, float fDistance3, int imode);

        /*************************************************************
        Description:    //绝对椭圆 + 螺旋多圈插补SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        fcenter1    中心第一个轴运动绝对坐标。
                        fcenter2    中心第二个轴运动绝对坐标。
                        idirection  0-逆时针，1-顺时针
                        fADis         第一轴的椭圆半径，半长轴或者半短轴都可。
                        fBDis        第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋。
                        fCircles    正数 - 逆时针，负数 - 顺时针，不能为0，圈数可以为小数。
                        fDistance3	第三个轴的运动距离
                        imode      第三轴的速度计算:
          Output:         //
          Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_TangleAbsSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fCircles, float fDistance3, int imode);

        /*************************************************************
        Description:    //空间圆弧 + 螺旋插补运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第1个轴运动距离参数1	相对与起点
                        end2              第2个轴运动距离参数1	相对与起点  
                        end3              第3个轴运动距离参数1	相对与起点
                        centre1    第1个轴运动距离参数2	相对与起点
                        centre2    第2个轴运动距离参数2	相对与起点
                        centre3    第3个轴运动距离参数2 相对与起点
                        mode      指定前面参数的意义
                            0 当前点，中间点，终点三点定圆弧，距离参数1为终点距离，距离参数2为中间点距离。
                            1 走最小的圆弧，距离参数1为终点距离，距离参数2为圆心的距离。
                            2 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离。
                            3 先走最小的圆弧，再继续走完整圆，距离参数1为终点距离，距离参数2为圆心的距离。
                        fcenter4	第4个轴运动距离参数 
                        fcenter5	第5个轴运动距离参数
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MSpherical(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, int imode, float fcenter4, float fcenter5);

        /*************************************************************
        Description:    //空间圆弧 + 螺旋 插补SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第1个轴运动距离参数1	相对与起点
                        end2              第2个轴运动距离参数1	相对与起点  
                        end3              第3个轴运动距离参数1	相对与起点
                        centre1    第1个轴运动距离参数2	相对与起点
                        centre2    第2个轴运动距离参数2	相对与起点
                        centre3    第3个轴运动距离参数2 相对与起点
                        mode      指定前面参数的意义
                            0 当前点，中间点，终点三点定圆弧，距离参数1为终点距离，距离参数2为中间点距离。
                            1 走最小的圆弧，距离参数1为终点距离，距离参数2为圆心的距离。
                            2 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离。
                            3 先走最小的圆弧，再继续走完整圆，距离参数1为终点距离，距离参数2为圆心的距离。
                        fcenter4	第4个轴运动距离参数 
                        fcenter5	第5个轴运动距离参数
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MSphericalSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, int imode, float fcenter4, float fcenter5);

        /*************************************************************
        Description:    //绝对空间圆弧多圈
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第1个轴运动距离参数1	绝对位置
                        end2              第2个轴运动距离参数1	绝对位置 
                        end3              第3个轴运动距离参数1	绝对位置
                        centre1    第1个轴运动距离参数2	绝对位置
                        centre2    第2个轴运动距离参数2	绝对位置
                        centre3    第3个轴运动距离参数2 绝对位置
                        fRange     螺旋圈数，支持小数圈数
                        mode      指定前面参数的意义
                            0 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离。
                            1 当前点，圆心，终点定圆弧。走最短的圆弧。距离参数1为终点距离，距离参数2为圆心的距离
                        fDistance4    空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MSpaceHerical(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, float fRange, int imode, float fDistance4);

        /*************************************************************
        Description:    //绝对空间圆弧多圈SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第1个轴运动距离参数1	绝对位置
                        end2              第2个轴运动距离参数1	绝对位置 
                        end3              第3个轴运动距离参数1	绝对位置
                        centre1    第1个轴运动距离参数2	绝对位置
                        centre2    第2个轴运动距离参数2	绝对位置
                        centre3    第3个轴运动距离参数2 绝对位置
                        fRange     螺旋圈数，支持小数圈数
                        mode      指定前面参数的意义
                            0 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离。
                            1 当前点，圆心，终点定圆弧。走最短的圆弧。距离参数1为终点距离，距离参数2为圆心的距离
                        fDistance4    空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MSpaceHericalSp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, float fRange, int imode, float fDistance4);

        /*************************************************************
        Description:    //绝对空间圆弧多圈双段
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第1个轴运动距离参数1	绝对位置
                        end2              第2个轴运动距离参数1	绝对位置 
                        end3              第3个轴运动距离参数1	绝对位置
                        centre1    第1个轴运动距离参数2	绝对位置
                        centre2    第2个轴运动距离参数2	绝对位置
                        centre3    第3个轴运动距离参数2 绝对位置
                        fRange       第一段螺旋圈数，支持小数圈数
                        fRange2      第二段螺旋圈数，支持小数圈数
                        mode      指定前面参数的意义
                            0 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离。
                            1 当前点，圆心，终点定圆弧。走最短的圆弧。距离参数1为终点距离，距离参数2为圆心的距离
                        fDistance4    第一段空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
                        fDistance5    第二段空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MSpaceHerical2(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, float fRange, float fRange2, int imode, float fDistance4, float fDistance5);

        /*************************************************************
        Description:    //绝对空间圆弧多圈双段SP运动
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        end1              第1个轴运动距离参数1	绝对位置
                        end2              第2个轴运动距离参数1	绝对位置 
                        end3              第3个轴运动距离参数1	绝对位置
                        centre1    第1个轴运动距离参数2	绝对位置
                        centre2    第2个轴运动距离参数2	绝对位置
                        centre3    第3个轴运动距离参数2 绝对位置
                        fRange       第一段螺旋圈数，支持小数圈数
                        fRange2      第二段螺旋圈数，支持小数圈数
                        mode      指定前面参数的意义
                            0 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离。
                            1 当前点，圆心，终点定圆弧。走最短的圆弧。距离参数1为终点距离，距离参数2为圆心的距离
                        fDistance4    第一段空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
                        fDistance5    第二段空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MSpaceHerical2Sp(IntPtr handle, int imaxaxises, int[] piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, float fRange, float fRange2, int imode, float fDistance4, float fDistance5);

        /*************************************************************
        Description:    //渐开线圆弧插补运动，相对移动方式，当起始半径0直接扩散时从0角度开始
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        centre1: 第1轴圆心的相对距离
                        centre2: 第2轴圆心的相对距离
                        circles:  要旋转的圈数，可以为小数圈，负数表示顺时针.
                        pitch:   每圈的扩散距离，可以为负。
                        distance3        第3轴螺旋的功能，指定第3轴的相对距离，此轴不参与速度计算。
                        distance4        第4轴螺旋的功能，指定第4轴的相对距离，此轴不参与速度计算。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveSpiral(IntPtr handle, int imaxaxises, int[] piAxislist, float centre1, float centre2, float circles, float pitch, float distance3, float distance4);

        /*************************************************************
        Description:    //渐开线圆弧插补SP运动，相对移动方式，当起始半径0直接扩散时从0角度开始
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        centre1: 第1轴圆心的相对距离
                        centre2: 第2轴圆心的相对距离
                        circles:  要旋转的圈数，可以为小数圈，负数表示顺时针.
                        pitch:   每圈的扩散距离，可以为负。
                        distance3        第3轴螺旋的功能，指定第3轴的相对距离，此轴不参与速度计算。
                        distance4        第4轴螺旋的功能，指定第4轴的相对距离，此轴不参与速度计算。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveSpiralSp(IntPtr handle, int imaxaxises, int[] piAxislist, float centre1, float centre2, float circles, float pitch, float distance3, float distance4);

        /*************************************************************
        Description:    //运动暂停		，插补运动暂停主轴。轴列表轴第一个轴
        Input:          //卡链接handle
                        轴号 iaxis
                        模式 imode	0（缺省） 暂停当前运动。 
                                    1 在当前运动完成后正准备执行下一条运动指令时暂停。 
                                    2 在当前运动完成后正准备执行下一条运动指令时，并且两条指令的MARK标识不一样时暂停。这个模式可以用于一个动作由多个指令来实现时，可以在一整个动作完成后暂停。 
  
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MovePause(IntPtr handle, int iaxis, int imode);

        /*************************************************************
        Description:    //取消运动暂停
        Input:          //卡链接handle
                            轴号 iaxis
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveResume(IntPtr handle, int iaxis);

        /*************************************************************
        Description:    //在当前的运动末尾位置增加速度限制，用于强制拐角减速
        Input:          //卡链接handle
                         轴号 iaxis
        Output:         //
         Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveLimit(IntPtr handle, int iaxis, float limitspeed);

        /*************************************************************
        Description:    //在运动缓冲中加入输出指令
        Input:          //卡链接handle
                        轴号 iaxis
                        输出口编号 ioutnum
                        输出口状态	ivalue
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveOp(IntPtr handle, int iaxis, int ioutnum, int ivalue);

        /*************************************************************
        Description:    //在运动缓冲中加入连续输出口输出指令
        Input:          //卡链接handle
                        轴号 iaxis
                        输出口起始编号 ioutnumfirst
                        输出口结束编号 ioutnumend
                        对应输出口状态二进制组合值	ivalue
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveOpMulti(IntPtr handle, int iaxis, int ioutnumfirst, int ioutnumend, int ivalue);

        /*************************************************************
        Description:    //在运动缓冲中加入输出指令 ,指定时间后输出状态翻转
        Input:          //卡链接handle
                        轴号 iaxis
                        输出口编号 ioutnum
                        输出口状态	ivalue
                        状态反转时间 iofftimems
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveOp2(IntPtr handle, int iaxis, int ioutnum, int ivalue, int iofftimems);

        /*************************************************************
        Description:    //在运动缓冲中加入AOUT输出指令
        Input:          //卡链接handle
                        轴号 iaxis
                        DA口编号 ioutnum
                        模拟量值 fvalue
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveAout(IntPtr handle, int iaxis, int ioutnum, float fvalue);

        /*************************************************************
        Description:    //在运动缓冲中加入延时指令
        Input:          //卡链接handle
                        轴号 iaxis
                        延时时间 itimems 毫秒
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveDelay(IntPtr handle, int iaxis, int itimems);

        /*************************************************************
        Description:    //运动缓冲中插入同步其他轴的运动
        Input:          //卡链接handle
                        主轴轴号 base_axis
				        同步轴号 iaxis
				        相对运动距离 fdist
                        是否使用SP运动0/1, 缺省不使用 ifsp
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveSynmove(IntPtr handle, int base_axis, int iaxis, float fdist, int ifsp);

        /*************************************************************
        Description:    //运动缓冲中插入触发其他轴的运动
        Input:          //卡链接handle
                        主轴轴号 base_axis
				        触发轴轴号 iaxis
				        相对运动距离 fdist
                        是否使用SP运动0/1, 缺省不使用 ifsp
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveASynmove(IntPtr handle, int base_axis, int iaxis, float fdist, int ifsp);

        /*************************************************************
        Description:    //电子凸轮 同步运动
        Input:          //卡链接handle
                        iaxis			轴号
                        istartpoint		起始点TABLE编号
                        iendpoint		结束点TABLE编号
                        ftablemulti		位置比例，一般设为脉冲当量值
                        fDistance		参考运动的距离，用来计算总运动时间
         Output:         //
         Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Cam(IntPtr handle, int iaxis, int istartpoint, int iendpoint, float ftablemulti, float fDistance);

        /*************************************************************
        Description:    //电子凸轮 同步运动
        Input:          //卡链接handle
                        iaxis			轴号
                        istartpoint		起始点TABLE编号
                        iendpoint		结束点TABLE编号
                        ftablemulti		位置比例，一般设为脉冲当量值
                        fDistance		参考运动的距离
                        ilinkaxis		参考主轴
                        ioption			参考轴的连接方式
                        flinkstartpos	ioption条件中距离参数
         Output:         //
         Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Cambox(IntPtr handle, int iaxis, int istartpoint, int iendpoint, float ftablemulti, float fDistance, int ilinkaxis, int ioption, float flinkstartpos);

        /*************************************************************
        Description:    //特殊凸轮 同步运动
        Input:          //卡链接handle
                        iaxis			参与运动的轴号(跟随轴)
                        fDistance		同步过程跟随轴运动距离
                        fLinkDis		同步过程参考轴(主轴)运动绝对距离
                        fLinkAcc		跟随轴加速阶段，参考轴移动的绝对距离
                        fLinkDec		跟随轴减速阶段，参考轴移动的绝对距离
                        iLinkaxis		参考轴的轴号
                        ioption			连接模式选项
                        flinkstartpos	连接模式选项中运动距离
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Movelink(IntPtr handle, int iaxis, float fDistance, float fLinkDis, float fLinkAcc, float fLinkDec, int iLinkaxis, int ioption, float flinkstartpos);

        /*************************************************************
        Description:    //特殊凸轮 同步运动
        Input:          //卡链接handle
                        iaxis			参与运动的轴号(跟随轴)
                        fDistance		同步过程跟随轴运动距离
                        fLinkDis		同步过程参考轴(主轴)运动绝对距离
                        startsp			启动时跟随轴和参考轴的速度比例，units/units单位，负数表示跟随轴负向运动
                        endsp			结束时跟随轴和参考轴的速度比例，units/units单位, 负数表示跟随轴负向运动。
                        iLinkaxis		参考轴的轴号
                        ioption			连接模式选项
                        flinkstartpos	连接模式选项中运动距离
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Moveslink(IntPtr handle, int iaxis, float fDistance, float fLinkDis, float startsp, float endsp, int iLinkaxis, int ioption, float flinkstartpos);

        /*************************************************************
        Description:    //特殊凸轮 同步运动
        Input:          //卡链接handle
                        iaxis			参与运动的轴号(跟随轴)
                        fBasedist		跟随轴匀速移动的相对距离，采用units单位。
                        fExcitedist		跟随轴激励移动的相对距离，采用units单位。+值表示增加，-值表示减少，跟随轴运动总距离=fBasedist+fExcitedist
                        fLinkdist		参考轴在连接的整个过程中移动的相对距离，采用units单位。
                        fBasein			激励开始前，跟随轴运动距离占fBasedist的百分比
                        fBbaseout		激励完成后，跟随轴剩余运动距离占fBasedist的百分比（两者相加不要超过100%，否则fExcitedist无效）
                        fExciteacc		激励过程中，跟随轴加速阶段运动距离占fExcitedist的百分比，fExcitedist为负值时，为减速阶段
                        fExcitedec		激励过程中，跟随轴减速阶段运动距离占fExcitedist的百分比，fExcitedist为负值时，为加速阶段
                        ilinkaxis		参考轴的轴号。
                        ioptions	与参考轴的连接方式，不同的二进制位代表不同的意义。
                        fLinkpos		当 ioptions 参数BIT1置为1时，该参数表示连接开始启动的绝对位置。
                        fLinkoffpos		当 ioptions 参数BIT4置为1时，该参数表示主轴已经运行完的相对位置。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Flexlink(IntPtr handle, int iaxis, float fBasedist, float fExcitedist, float fLinkdist, float fBasein, float fBaseout, float fExciteacc, float fExcitedec, int iLinkaxis, int ioption, float fLinkpos, float fLinkoffpos);

        /*************************************************************
        Description:    //特殊凸轮 皮带同步跟随运动
        Input:          //卡链接handle
				        imode			同步模式 -1结束模式  -2强制结束 0-第一个轴跟随 10-第二个轴跟随 20-第三个轴跟随  +angle：皮带与跟随轴的正向旋转角度
				        synctime		同步时间，ms单位，本运动在指定时间内完成，完成时BASE轴跟上皮带且保持速度一致。0表示根据运动轴的速度加速度来估计同步时间
				        syncposition	皮带轴物体被感应到时皮带轴的位置
				        syncaxis		皮带轴轴号
				        imaxaxises		参与同步从轴总数
				        piAxislist		从轴号列表
				        pfDposlist		皮带轴物体被感应到时从轴的绝对坐标位置 同步点
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveSync(IntPtr handle, float imode, int synctime, float syncposition, int syncaxis, int imaxaxises, int[] piAxislist, float[] pfDposlist);

        /*************************************************************
        Description:    //连接 同步运动指令 电子齿轮
        Input:          //卡链接handle
                        ratio		比率，可正可负，注意是脉冲个数的比例。	
                        link_axis	连接轴的轴号，手轮时为编码器轴
                        move_axis	随动轴号
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Connect(IntPtr handle, float ratio, int link_axis, int move_axis);

        /*************************************************************
        Description:    //连接 同步运动指令 电子齿轮 将当前轴的目标位置与link_axis轴的插补矢量长度通过电子齿轮连接
        Input:          //卡链接handle
                        ratio		比率，可正可负，注意是脉冲个数的比例。	
                        link_axis	连接轴的轴号，手轮时为编码器轴
                        move_axis	随动轴号
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Connpath(IntPtr handle, float ratio, int link_axis, int move_axis);

        /*************************************************************
        Description:    //位置锁存指令
        Input:          //卡链接handle
                        iaxis	轴号
                        imode	锁存模式
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Regist(IntPtr handle, int iaxis, int imode);

        /*************************************************************
        Description:    //编码器输入齿轮比，缺省(1,1)
        Input:          //卡链接handle
                        iaxis		轴号
                        mpos_count	分子，不要超过65535
                        input_count	 分母，不要超过65535
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_EncoderRatio(IntPtr handle, int iaxis, int mpos_count, int input_count);

        /*************************************************************
        Description:    //设置步进输出齿轮比，缺省(1,1)
        Input:          //卡链接handle
                        iaxis		轴号
                        mpos_count	分子，1-65535
                        input_count	 分母，1-65535
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_StepRatio(IntPtr handle, int iaxis, int mpos_count, int input_count);

        /*************************************************************
        Description:    //所有轴立即停止
        Input:          //卡链接handle 
                        imode 停止模式
                        0（缺省）取消当前运动
                        1	取消缓冲的运动
                        2	取消当前运动和缓冲运动。
                        3	立即中断脉冲发送。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Rapidstop(IntPtr handle, int imode);

        /*************************************************************
        Description:    //多个轴运动停止
        Input:          //卡链接handle轴号， 距离
                        imaxaxises		轴数
                        piAxislist		轴列表
                        imode	模式
                            0（缺省）取消当前运动
                            1	取消缓冲的运动
                            2	取消当前运动和缓冲运动。
                            3	立即中断脉冲发送。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_CancelAxisList(IntPtr handle, int imaxaxises, int[] piAxislist, int imode);

        /*************************************************************
        Description:    //轴叠加运动	iaddaxis运动叠加到iaxis轴 ，ADDAX指令叠加的是脉冲个数
        Input:          //卡链接handle
                         iaxis		被叠加轴
                         iaddaxis	叠加轴
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Single_Addax(IntPtr handle, int iaxis, int iaddaxis);

        /*************************************************************
        Description:    //单轴运动停止
        Input:          //卡链接handle
                        iaxis 轴号
                        imode 模式
                            0（缺省）取消当前运动
                            1	取消缓冲的运动
                            2	取消当前运动和缓冲运动。
                            3	立即中断脉冲发送。
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Single_Cancel(IntPtr handle, int iaxis, int imode);

        /*************************************************************
        Description:    //单轴连续运动
        Input:          //卡链接handle
                        iaxis 轴号
                        idir 方向 1正向 -1负向
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Single_Vmove(IntPtr handle, int iaxis, int idir);

        /*************************************************************
        Description:    //控制器方式回零
        Input:          //卡链接handle
                        iaxis	轴号
                        imode	模式
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Single_Datum(IntPtr handle, int iaxis, int imode);

        /*************************************************************
        Description:    //单轴相对运动
        Input:          //卡链接handle
                        iaxis 轴号
                        fdistance 距离
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Single_Move(IntPtr handle, int iaxis, float fdistance);

        /*************************************************************
        Description:    //单轴绝对运动
        Input:          //卡链接handle
                        iaxis 轴号
                        fdistance 距离
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Single_MoveAbs(IntPtr handle, int iaxis, float fdistance);

        /*********************内存操作
        /*************************************************************
        Description:    //写VR, 
        Input:          //卡链接handle 
				        vrstartnum		VR起始编号
				        numes			写入的数量
				        pfValue			写入的数据列表
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetVrf(IntPtr handle, int vrstartnum, int numes, float[] pfValue);

        /*************************************************************
        Description:    //VR读取, 可以一次读取多个
        Input:          //卡链接handle
                        vrstartnum	读取的VR起始地址
                        numes		读取的数量
        Output:         //pfValue  返回的读取值，多个时必须分配空间.
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetVrf(IntPtr handle, int vrstartnum, int numes, float[] pfValue);

        /*************************************************************
        Description:    //VRINT读取
        Input:          //卡链接handle
                        vrstartnum	读取的VR起始地址
                        numes		读取的数量
                        Output:         //piValue  返回的读取值，多个时必须分配空间.
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetVrInt(IntPtr handle, int vrstartnum, int numes, int[] piValue);

        /*************************************************************
        Description:    //写table 
        Input:          //卡链接handle 
                        tabstart	写入的TABLE起始编号
                        numes		写入的数量
                        pfValue		写入的数据值
        Output:         //	
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetTable(IntPtr handle, int tabstart, int numes, float[] pfValue);

        /*************************************************************
        Description:    //table读取, 可以一次读取多个
        Input:          //卡链接handle
                        tabstart	读取TABLE起始地址
                        numes		读取的数量
        Output:         //pfValue  多个时必须分配空间.
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetTable(IntPtr handle, int tabstart, int numes, float[] pfValue);

        /*************************************************************
        Description:    //把float格式的变量列表存储到文件， 与控制器的U盘文件格式一致.
        Input:          //sFilename 文件绝对路径
                        pVarlist	写入的数据列表
                        inum		数据的长度
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_WriteUFile(IntPtr handle, string sFilename, float[] pVarlist, int inum);

        /*************************************************************
        Description:    //读取float格式的变量列表， 与控制器的U盘文件格式一致.
        Input:          //sFilename 文件绝对路径
                        inum		数据的长度	
        Output:         //pVarlist	读取的数据列表
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_ReadUFile(IntPtr handle, string sFilename, float[] pVarlist, ref int inum);

        /*************************************************************
        Description:    //modbus寄存器操作 modbus_bit
        Input:          //卡链接handle 寄存器地址
                        start	起始编号
                        inum	数量
                        pdata 设置的位状态  按位存储
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Modbus_Set0x(IntPtr handle, ushort start, ushort inum, byte[] pdata);

        /*************************************************************
        Description:    //modbus寄存器操作 modbus_bit
        Input:          //卡链接handle 寄存器地址
                        start	起始编号
                        inum	数量
        Output:         //pdata 返回的位状态  按位存储
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Modbus_Get0x(IntPtr handle, ushort start, ushort inum, byte[] pdata);

        /*************************************************************
        Description:    //modbus寄存器操作 MODBUS_REG
        Input:          //卡链接handle 寄存器地址
                        start	起始编号
                        inum	数量
        Output:         //pdata	读取的REG寄存器值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Modbus_Set4x(IntPtr handle, ushort start, ushort inum, ushort[] pdata);

        /*************************************************************
        Description:    //modbus寄存器操作 MODBUS_REG
        Input:          //卡链接handle 寄存器地址
                        start	起始编号
                        inum	数量
        Output:         //pdata	读取的REG寄存器值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Modbus_Get4x(IntPtr handle, ushort start, ushort inum, ushort[] pdata);

        /*************************************************************
        Description:    //modbus寄存器操作		MODBUS_IEEE
        Input:          //卡链接handle 寄存器地址
                        start	起始编号
                        inum	数量
                        pfdata	设置值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Modbus_Get4x_Float(IntPtr handle, ushort start, ushort inum, float[] pfdata);

        /*************************************************************
        Description:    //modbus寄存器操作		MODBUS_IEEE
        Input:          //卡链接handle 寄存器地址
                        start	起始编号
                        inum	数量
                        pfdata	设置值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Modbus_Set4x_Float(IntPtr handle, ushort start, ushort inum, float[] pfdata);

        /*************************************************************
        Description:    //modbus寄存器操作		MODBUS_LONG
        Input:          //卡链接handle 寄存器地址
                        start	起始编号
                        inum	数量
                        pidata	设置值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Modbus_Get4x_Long(IntPtr handle, ushort start, ushort inum, int[] pidata);

        /*************************************************************
        Description:    //modbus寄存器操作 MODBUS_LONG
        Input:          //卡链接handle 寄存器地址
                        start	起始编号
                        inum	数量
        Output:         //pidata	读取的REG寄存器值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Modbus_Set4x_Long(IntPtr handle, ushort start, ushort inum, int[] pidata);

        /*************************************************************
        Description:    //写用户flash块, float数据
        Input:          //卡链接handle
                            uiflashid 	flash块号
                            uinumes		变量个数
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_FlashWritef(IntPtr handle, ushort uiflashid, uint uinumes, float[] pfvlue);

        /*************************************************************
        Description:    //读取用户flash块, float数据
        Input:          //卡链接handle
                            uiflashid 	flash块号
                            uibuffnum	缓冲变量个数
        Output:         //
                            puinumesread 读取到的变量个数
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_FlashReadf(IntPtr handle, ushort uiflashid, uint uibuffnum, float[] pfvlue, ref uint puinumesread);

        /*************************************************************
        Description:    //示波器触发函数
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Trigger(IntPtr handle);

        /*************************************************************
        Description:    //示波器触发函数
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetTrigger(IntPtr handle, ref byte pTrigger);

        /*************************************************************
        Description:    //位置比较PSWITCH
        Input:          //卡链接handle
                        //比较器编号 num
                        //比较器使能 enable 0/1
                        //比较的轴号 axisnum
                        //输出口编号 outnum
                        //输出状态	outstate 0/1
                        //比较起始位置	setpos
                        //输出复位位置	resetpos
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_Pswitch(IntPtr handle, int num, int enable, int axisnum, int outnum, int outstate, float setpos, float resetpos);

        /*************************************************************
        Description:    //硬件位置比较输出
        Input:          //卡链接handle
                        //模式	 mode 1-启动比较器, 2- 停止并删除没完成的比较点.
                        //方向 direction 0-坐标负向,  1- 坐标正向  
                        //预留 Reserve   预留
                        //TABLE起始点 Tablestart  第一个比较点坐标所在TABLE编号
                        //TABLE结束点 tableend 最后一个比较点坐标所在TABLE编号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_HwPswitch(IntPtr handle, int Axisnum, int Mode, int Direction, int Reserve, int Tablestart, int Tableend);

        /*************************************************************
        Description:    //硬件位置比较输出2
        Input:          //卡链接					handle
                        //模式						mode		
                        //输出口编号				Opnum
                        //第一个比较点的输出状态	Opstate		0-关闭 1打开										
                        //多功能参数				ModePara1	 
                        //多功能参数				ModePara2
                        //多功能参数				ModePara3
                        //多功能参数				ModePara4

        mode 1-启动比较器, 
                ModePara1 =  第一个比较点坐标所在TABLE编号
                ModePara2 =	 最后一个比较点坐标所在TABLE编号
                ModePara3 =  第一个点判断方向,  0-坐标负向,  1- 坐标正向,  -1-不使用方向
                ModePara4 =	 预留

        mode 2- 停止并删除没完成的比较点. 
                ModePara1 =  预留
                ModePara2 =	 预留
                ModePara3 =  预留
                ModePara4 =	 预留

        mode 3- 矢量比较方式
                ModePara1 =  第一个比较点坐标所在TABLE编号
                ModePara2 =	 最后一个比较点坐标所在TABLE编号
                ModePara3 =  预留
                ModePara4 =	 预留

        Mode=4 :矢量比较方式, 单个比较点
                ModePara1 =  比较点坐标
                ModePara2 =	 预留
                ModePara3 =  预留
                ModePara4 =	 预留

        Mode=5 :矢量比较方式, 周期脉冲模式
                ModePara1 =  比较点坐标
                ModePara2 =	 重复周期, 一个周期内比较两次, 先输出有效状态,再输出无效状态.
                ModePara3 =  周期距离, 每隔这个距离输出Opstate, 输出有效状态的距离（ModePara4）后还原为无效状态.
                ModePara4 =	 输出有效状态的距离,  (ModePara3- ModePara4) 为无效状态距离

        Mode=6 :矢量比较方式, 周期模式, 这种模式一般与HW_TIMER一起使用.
                ModePara1 =  比较点坐标
                ModePara2 =	 重复周期, 一个周期只比较一次
                ModePara3 =  周期距离, 每隔这个距离输出一次
                ModePara4 =	 预留
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_HwPswitch2(IntPtr handle, int Axisnum, int Mode, int Opnum, int Opstate, float ModePara1, float ModePara2, float ModePara3, float ModePara4);

        /*************************************************************
        Description:    //硬件位置比较输出剩余缓冲获取
        Input:          //卡链接handle
                        //轴号	 axisnum
        output:			//位置比较输出剩余缓冲数		buff
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetHwPswitchBuff(IntPtr handle, int axisnum, ref int buff);

        /*************************************************************
        Description:    //硬件定时器用于硬件比较输出后一段时间后还原电平
        Input:          //卡链接	handle  
                        //模式			mode		0停止,  2-启动			
                        //周期时间	   cyclonetime  us单位
                        //有效时间	   optime		us单位
                        //重复次数	   reptimes
                        //输出缺省状态 opstate		输出口变为非此状态后开始计时
                        //输出口编号   opnum		必须能硬件比较输出的口
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_HwTimer(IntPtr handle, int mode, int cyclonetime, int optime, int reptimes, int opstate, int opnum);

        /*************************************************************
        Description:    //读取轴历史停止原因锁存
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetAxisStopReason(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置轴历史停止原因锁存
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetAxisStopReason(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //获取控制器最大规格数
        Input:          //卡链接handle 
        Output:         //Max_VirtuAxises	 最大虚拟轴数
        Output:         //Max_motor			 最大电机数量
        Output:         //Max_io			 最大IN,OUT,AD,DA数量				
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetSysSpecification(IntPtr handle, ref ushort Max_VirtuAxises, ref byte Max_motor, byte[] Max_io);

        /********************  函数 新增 ***********************/
        /*************************************************************
        Description:    //运动中修改PWM 
        Input:          //卡链接handlePARANAME, INDEX, VALUE
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MovePwm(IntPtr handle, uint base_axis, uint pwm_num, float pwm_duty, float pwm_freq);

        /*************************************************************
        Description:    //运动中修改TABLE
        Input:          //卡链接handle
                        base_axis	插补主轴编号
                        table_num	TABLE编号
                        fvalue		修改值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveTable(IntPtr handle, uint base_axis, uint table_num, float fvalue);

        /*************************************************************
        Description:    //BASE轴运动缓冲加入一个TASK任务 当任务已经启动时，会报错，但不影响程序执行。
        Input:          //卡链接handle			
                        base_axis	插补主轴编号
                        tasknum   	任务编号 
                        labelname		BAS中全局函数名或者标号
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveTask(IntPtr handle, uint base_axis, uint tasknum, string labelname);

        /*************************************************************
        Description:    //BASE轴运动缓冲加入一个可变的延时 
        Input:          //卡链接handle
                        base_axis	插补主轴编号
                        paraname	参数名字符串 DPOS MPOS IN AIN VPSPEED MSPEED MODBUS_REG MODBUS_IEEE MODBUS_BIT NVRAM VECT_BUFFED  REMAIN 
                        inum		参数编号或轴号
                        Cmp_mode	比较条件 1 >=   0=  -1<=  对IN等BIT类型参数无效。
                        fvalue		比较值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveWait(IntPtr handle, uint base_axis, string paraname, int inum, int Cmp_mode, float fvalue);

        /*************************************************************
        Description:    //相对位置时间插补
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        ftimes              时间长度，单位毫秒
                        pfDisancelist		距离列表
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MovePt(IntPtr handle, int imaxaxises, int[] piAxislist, float ftimes, float[] pfDisancelist);

        /*************************************************************
        Description:    //绝对位置时间插补
        Input:          //卡链接handle
                        imaxaxises			参与运动总轴数
                        piAxislist			轴号列表
                        ftimes              时间长度，单位毫秒
                        pfDisancelist		距离列表
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MovePtAbs(IntPtr handle, int imaxaxises, int[] piAxislist, float ftimes, float[] pfDisancelist);

        /*************************************************************
        Description:    //运动中修改参数
        Input:          //卡链接handlePARANAME, INDEX, VALUE
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MovePara(IntPtr handle, uint base_axis, string paraname, uint iaxis, float fvalue);

        /*************************************************************
        Description:    //BASE轴运动缓冲加入一个MOVE_LIST指令
        Input:          //卡链接handle 
                        base_axis	插补主轴编号
                        imaxparas	参数个数
                        pfvalue		值列表
                        pfvaluelist[0] 指令类型
                            当 pfvaluelist[0]=0 时为列表输出功能
                                pfvaluelist[1]   TABLE列表起始位置index，第i个数据：TABLE[index*i] 存放输出口编号，TABLE[index*i +1] 存放输出口状态
                            当 pfvaluelist[0]=1 时为比较输出功能
                                pfvaluelist[1]  比较功能模式 =0 关闭比较输出功能  1 打开
                                pfvaluelist[2]  输出口编号inum。
                                pfvaluelist[3]  输出口状态state
                                pfvaluelist[4]  相对矢量距离，大于0有效，到达此条件时op(inum)=state
                                pfvaluelist[5]  保持state的时间，时间到自动设置输出口为反状态，大于0有效,到达此条件时op(inum)= not state
                            当 pfvaluelist[0]=2 时为输入计数功能，注意：计数频率小于1000HZ。一次翻转计数加1，如果是一个脉冲，计数加2。
                                pfvaluelist[1]  计数是否使能 =0 关闭  1 打开
                                pfvaluelist[2]  计数通道 0-32
                                pfvaluelist[3]  当bifenable=1时有效，输入通道
                                pfvaluelist[4]  TABLE编号index,当bifenable=1时有效，将计数值保持在TABLE(index)中
                            当 pfvaluelist[0]=3 时为输入判断
                                pfvaluelist[1]  输入口编号
                                pfvaluelist[2]  输入口状态
                                pfvaluelist[3]  TABLE编号index,当in(inchannel)= state时，modbus_reg(index)=value 否则modbus_reg(index)=0
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveList(IntPtr handle, uint base_axis, uint imaxparas, float[] pfvaluelist);

        /*************************************************************
        Description:    //BASE轴运动缓冲加入一个位置比较PSWITCH
        Input:          //卡链接handle
                        //base_axis	插补主轴编号
                        //比较器编号 num
                        //比较器使能 enable 0/1
                        //比较的轴号 axisnum
                        //输出口编号 outnum
                        //输出状态	outstate 0/1
                        //比较起始位置	setpos
                        //输出复位位置	resetpos
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MovePswitch(IntPtr handle, uint base_axis, int num, int enable, int axisnum, int outnum, int outstate, float setpos, float resetpos);

        /*************************************************************
        Description:    //BASE轴运动缓冲加入一个硬件位置比较输出
        Input:          //卡链接handle
                        //base_axis	插补主轴编号
                        //模式	 mode 1-启动比较器, 2- 停止并删除没完成的比较点.
                        //方向 direction 0-坐标负向,  1- 坐标正向  
                        //预留 reserve   预留
                        //TABLE起始点 tableStart  第一个比较点坐标所在TABLE编号
                        //TABLE结束点 tableEnd 最后一个比较点坐标所在TABLE编号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveHwPswitch(IntPtr handle, uint base_axis, int axisnum, int mode, int direction, int reserve, int tableStart, int tableEnd);

        /*************************************************************
        Description:    //BASE轴运动缓冲加入一个硬件位置比较输出2
        Input:          //卡链接					handle
                        //base_axis	插补主轴编号
                        //模式						mode		
                        //输出口编号				opnum
                        //第一个比较点的输出状态	opstate		0-关闭 1打开										
                        //多功能参数				ModePara1	 
                        //多功能参数				ModePara2
                        //多功能参数				ModePara3
                        //多功能参数				ModePara4

        mode 1-启动比较器, 
                ModePara1 =  第一个比较点坐标所在TABLE编号
                ModePara2 =	 最后一个比较点坐标所在TABLE编号
                ModePara3 =  第一个点判断方向,  0-坐标负向,  1- 坐标正向,  -1-不使用方向
                ModePara4 =	 预留

        mode 2- 停止并删除没完成的比较点. 
                ModePara1 =  预留
                ModePara2 =	 预留
                ModePara3 =  预留
                ModePara4 =	 预留

        mode 3- 矢量比较方式
                ModePara1 =  第一个比较点坐标所在TABLE编号
                ModePara2 =	 最后一个比较点坐标所在TABLE编号
                ModePara3 =  预留
                ModePara4 =	 预留

        Mode=4 :矢量比较方式, 单个比较点
                ModePara1 =  比较点坐标
                ModePara2 =	 预留
                ModePara3 =  预留
                ModePara4 =	 预留

        Mode=5 :矢量比较方式, 周期脉冲模式
                ModePara1 =  比较点坐标
                ModePara2 =	 重复周期, 一个周期内比较两次, 先输出有效状态,再输出无效状态.
                ModePara3 =  周期距离, 每隔这个距离输出opstate, 输出有效状态的距离（ModePara4）后还原为无效状态.
                ModePara4 =	 输出有效状态的距离,  (ModePara3- ModePara4) 为无效状态距离

        Mode=6 :矢量比较方式, 周期模式, 这种模式一般与HW_TIMER一起使用.
                ModePara1 =  比较点坐标
                ModePara2 =	 重复周期, 一个周期只比较一次
                ModePara3 =  周期距离, 每隔这个距离输出一次
                ModePara4 =	 预留
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveHwPswitch2(IntPtr handle, uint base_axis, int axisnum, int mode, int opnum, int opstate, float ModePara1, float ModePara2, float ModePara3, float ModePara4);

        /*************************************************************
        Description:    //BASE轴运动缓冲加入一个硬件定时器
        Input:          //卡链接	handle  
                        //base_axis	插补主轴编号
                        //模式			mode		0停止,  2-启动			
                        //周期时间	   cyclonetime  us单位
                        //有效时间	   optime		us单位
                        //重复次数	   reptimes
                        //输出缺省状态 opstate		输出口变为非此状态后开始计时
                        //输出口编号   opnum		必须能硬件比较输出的口
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MoveHwTimer(IntPtr handle, uint base_axis, int mode, int cyclonetime, int optime, int reptimes, int opstate, int opnum);

        /*************************************************************
        Description:    //连续位置锁存指令
        Input:          //卡链接	handle  
                        //axis			轴号
                        //imode   		锁存模式			
                        //iTabStart    	连续锁存的内容存储的table位置，第一个table元素存储锁存的个数，
                        //             	后面存储锁存的坐标，最多保存个数= numes-1，溢出时循环写入
                        //iTabNum       占用的table个数
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_CycleRegist(IntPtr handle, int iaxis, int imode, int iTabStart, int iTabNum);

        /*************************************************************
        Description:    //设置多个输出信号
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetOpMulti(IntPtr handle, int startio, int endio, int iValue);

        /*************************************************************
        Description:    //读取多个输出信号
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetOpMulti(IntPtr handle, int startio, int endio, ref int piValue);

        /*************************************************************
        Description:    //读取多个输入信号
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetInMulti(IntPtr handle, int startio, int endio, ref int piValue);

        /*************************************************************
        Description:    //多条相对直线插补运动
        Input:          //卡链接handle
                        //发送运行指令数量 iMoveLen
                        //参与运动总轴数 imaxaxises
                        //轴列表 piAxislist
                        //运动位置列表 pfDposlist
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MultiMove(IntPtr handle, int iMoveLen, int imaxaxises, int[] piAxislist, float[] pfDposlist);

        /*************************************************************
        Description:    //多条相对直线插补运动
        Input:          //卡链接handle
                        //发送运行指令数量 iMoveLen
                        //参与运动总轴数 imaxaxises
                        //轴列表 piAxislist
                        //运动位置列表 pfDposlist
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MultiMoveAbs(IntPtr handle, int iMoveLen, int imaxaxises, int[] piAxislist, float[] pfDposlist);

        /*************************************************************
        Description:    //多条相对PT运动
        Input:          //卡链接handle
                        //发送运行指令数量 iMoveLen
                        //参与运动总轴数 imaxaxises
                        //轴列表 piAxislist
                        //周期列表 pTickslist
                        //运动位置列表 pfDposlist
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MultiMovePt(IntPtr handle, int iMoveLen, int imaxaxises, int[] piAxislist, int[] pTickslist, float[] pfDposlist);

        /*************************************************************
        Description:    //多条绝对PT运动
        Input:          //卡链接handle
                        //发送运行指令数量 iMoveLen
                        //参与运动总轴数 imaxaxises
                        //轴列表 piAxislist
                        //周期列表 pTickslist
                        //运动位置列表 pfDposlist
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_MultiMovePtAbs(IntPtr handle, int iMoveLen, int imaxaxises, int[] piAxislist, int[] pTickslist, float[] pfDposlist);

        /*************************************************************
        Description:    //读取是否动态变速
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetSpeedDyna(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置是否动态变速
        Input:          //卡链接handle
                    0 关闭动态速度，
                    1 打开动态速度，此时修改SPEED，实时修改正在运动的指令速度
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetSpeedDyna(IntPtr handle, int iaxis, int iValue);

        /*************************************************************
        Description:    //轴速度比例，0-1。 
                        轴实际运动速度为SPEED*SPEED_RATIO。 
                        用于运动中根据加减速的平滑速度改变。
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetSpeedRatio(IntPtr handle, int iaxis, ref float pfValue);

        /*************************************************************
        Description:    //轴速度比例，0-1。 
                        轴实际运动速度为SPEED*SPEED_RATIO。 
                        用于运动中根据加减速的平滑速度改变。
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetSpeedRatio(IntPtr handle, int iaxis, float fValue);

        /********************  总线的函数 新增 ***********************/
        /*************************************************************
        Description:    //设置模拟量输出 力矩、速度模式下可以  总线驱动需要设置对应DRIVE_PROFILE类型 与ATYPE
        Input:          //卡链接handle
                        iaxis 轴号
                        模拟量 输出值
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_SetDAC(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取模拟量输出 力矩、速度模式下可以  总线驱动需要设置对应DRIVE_PROFILE类型 与ATYPE
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //fValue 模拟量返回值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetDAC(IntPtr handle, int iaxis, ref float fValue);

        /*************************************************************
        Description:    //总线初始化
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_InitBus(IntPtr handle);

        /*************************************************************
        Description:    //获取总线初始化完成状态
        Input:          //卡链接handle
        Output:         //
        Return:         //错误码piValue 0-初始化失败 1成功
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_GetInitStatus(IntPtr handle, ref int piValue);

        /*************************************************************
        Description:    //读取卡槽上节点数量
        Input:          //卡链接handle 
        :				 //slot 槽位号缺省0
        Output:         //piValue 返回扫描成功节点数量
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_GetNodeNum(IntPtr handle, int slot, ref int piValue);

        /*************************************************************
        Description:    //读取节点上的信息
        Input:          //卡链接handle 
                        slot	槽位号
                        node	节点编号
                        sel		信息编号	0-厂商编号1-设备编号 2-设备版本 3-别名 10-IN个数 11-OUT个数 
        Output:         //piValue 返回信息
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_GetNodeInfo(IntPtr handle, int slot, int node, int sel, ref int piValue);

        /*************************************************************
        Description:    //读取节点总线状态
        Input:          //卡链接handle
                        slot 槽位号缺省0
                        node 节点编号
        Output:         //nodestatus 按位处理 bit0-节点是否存在  bit1-通讯状态   bit2-节点状态
        值为1时，bit0为1，bit1和bit2为0，设备通讯正常
        值为3时，bit0和bit1为1，bit2为0，设备通讯出错
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_GetNodeStatus(IntPtr handle, int slot, int node, ref uint nodestatus);

        /*************************************************************
        Description:    //读取节点SDO参数信息
        Input:          //卡链接handle
                        slot	槽位号 缺省0
                        node	节点编号
                        index	对象字典编号（注意函数为10进制数据）
                        subindex	子编号	（注意函数为10进制数据）
                        type	数据类型  1-bool 2-int8 3-int16 4-int32 5-uint8 6-uint16 7-uint32
        Output:         //value 读取的数据值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_SDORead(IntPtr handle, int slot, int node, int index, int subindex, int type, ref int value);

        /*************************************************************
        Description:    //写节点SDO参数信息
        Input:          //卡链接handle
                        slot	槽位号 缺省0
                        node	节点编号
                        index	对象字典编号（注意函数为10进制数据）
                        subindex	子编号	（注意函数为10进制数据）
                        type	数据类型  1-bool 2-int8 3-int16 4-int32 5-uint8 6-uint16 7-uint32
                        value	设定的数据值
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_SDOWrite(IntPtr handle, int slot, int node, int index, int subindex, int type, int value);

        /*************************************************************
        Description:    //设置回零偏移距离
        Input:          //卡链接handle
                        iaxis 轴号
                        fValue 偏移距离
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_SetDatumOffpos(IntPtr handle, int iaxis, float fValue);

        /*************************************************************
        Description:    //读取回零偏移距离
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //fValue 反馈的偏移距离
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_GetDatumOffpos(IntPtr handle, int iaxis, ref float fValue);

        /*************************************************************
        Description:    //总线驱动器回零
        Input:          //卡链接handle
                        homemode 回零模式，查看驱动器手册
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_Datum(IntPtr handle, int iaxis, uint homemode);

        /*************************************************************
        Description:    //驱动器回零完成状态
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //homestatus 回零完成标志 0-回零异常 1回零成功
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_GetHomeStatus(IntPtr handle, int iaxis, ref uint homestatus);

        /*************************************************************
        Description:    //设置清除总线伺服报警
        Input:          //卡链接handle 
                        iaxis 轴号
                        mode 模式 0-清除当前告警  1-清除历史告警  2-清除外部输入告警
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_DriveClear(IntPtr handle, int iaxis, uint mode);

        /*************************************************************
        Description:    //读取当前总线驱动当前力矩	需要设置对应的DRIVE_PROFILE类型
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 当前转矩
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_GetDriveTorque(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        Description:    //设置当前总线驱动最大转矩  需要设置对应的DRIVE_PROFILE类型
        Input:          //卡链接handle		
                        iaxis 轴号
                        piValue 最大转矩限制
        Output:         //
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_SetMaxDriveTorque(IntPtr handle, int iaxis, int piValue);

        /*************************************************************
        Description:    //读取当前总线驱动最大转矩  需要设置对应的DRIVE_PROFILE类型
        Input:          //卡链接handle
                        iaxis 轴号
        Output:         //piValue 返回的最大转矩
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_BusCmd_GetMaxDriveTorque(IntPtr handle, int iaxis, ref int piValue);

        /*************************************************************
        说明：软件版本
        输入：  handle：卡链接handle
        输出：  pId：id编号
        返回值：错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetIdSoftware(IntPtr handle, ref ushort pId);

        /*************************************************************
        说明：硬件编号
        输入：  handle：卡链接handle
        输出：  pId：id编号
        返回值：错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetIdHardware(IntPtr handle, ref ushort pId);

        /*************************************************************
        说明：软件版本号，用日期标识
        输入：  handle：卡链接handle
        输出：  pVersion：版本
        返回值：错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetSoftwareVersion(IntPtr handle, ref uint pVersion);

        [DllImport("liwishell.dll")]
        public static extern int PMC_GetHardVersion(IntPtr handle, ref uint pVersion);

        [DllImport("liwishell.dll")]
        public static extern int PMC_GetControllerName(IntPtr handle, byte[] pName);

        /*************************************************************
        Description:    //读取控制器序列号
        Input:          //卡链接handle
        Output:         //
                            pIdentifier 控制器序列号
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetIdentifier(IntPtr handle, ref uint pIdentifier);

        /*************************************************************
        说明：读取脚本输出的信息
        输入：  handle：卡链接handle
        输出：
        返回值：错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_ReadMessage(IntPtr handle, byte[] pbuff, uint uimax, ref uint puiread);

        /*************************************************************
        Description:    //计算取矢量长度
        Input:          //卡链接handle
            itype 类型
            imaxaxises 轴数
            piAxislist 轴列表
            pfDisancelist 位置参数，    绝对位置
                itype = 0：初始化       起始位置点
                itype = 1：直线         终点位置
                itype = 2：绝对三点圆弧   中间点、结束点
                itype = 255: table模式    index[输入table编号]，returnindex计算结果table编号
                    table[index ~ ] 段数，[类型1，类型1数据列表, 类型2，类型2数据列表，。。。]
                    table[returnindex~]返回段数，[类型1矢量长度, 类型2矢量长度，。。。]
        Output:         //
            pVectLength 矢量长度
        Return:         //错误码
        *************************************************************/
        [DllImport("liwishell.dll")]
        public static extern int PMC_GetVectLength(IntPtr handle, int itype, int imaxaxises, int[] piAxislist, float[] pfDisancelist, ref float pVectLength);

        private static int getExecuteResponse(IntPtr handle, string command, ref string response)
        {
            byte[] psResponse = new byte[2048];
            int ret = PMC_Execute(handle, command, psResponse, (uint)(psResponse.Length - 1));
            if (ret == ERR_OK)
            {
                response = Encoding.Default.GetString(psResponse, 0, psResponse.Length).TrimEnd('\0');
            }
            return ret;
        }

        /// <summary>
        /// 读取多轴基本参数状态
        /// </summary>
        /// <param name="handle">连接句柄</param>
        /// <param name="imaxaxis">读取总轴数</param>
        /// <param name="IdleStatus">轴停止状态反馈值 0-运动中 -1停止中</param>
        /// <param name="DposStatus">轴命令位置反馈值</param>
        /// <param name="MposStatus">轴反馈位置反馈值</param>
        /// <param name="AxisStatus">轴状态</param>
        /// <returns>错误码</returns>
        public static int PMC_GetAllAxisInfo(IntPtr handle, int imaxaxis, int[] IdleStatus, float[] DposStatus, float[] MposStatus, int[] AxisStatus)
        {
            string[] names = new string[imaxaxis * 4];
            for (int i = 0; i < imaxaxis; i++)
            {
                names[i] = string.Format("{0}({1})", "IDLE", i);
                names[imaxaxis + i] = string.Format("{0}({1})", "DPOS", i);
                names[imaxaxis * 2 + i] = string.Format("{0}({1})", "MPOS", i);
                names[imaxaxis * 3 + i] = string.Format("{0}({1})", "AXISSTATUS", i);
            }

            string response = string.Empty;
            int ret = getExecuteResponse(handle, "?" + string.Join(",", names), ref response);
            if (ret == ERR_OK)
            {
                string[] responseValues = response.Split('\t');
                int num = Math.Min(imaxaxis, (responseValues.Length / 4));
                for (int i = 0; i < num; i++)
                {
                    int.TryParse(responseValues[i], out IdleStatus[i]);
                    float.TryParse(responseValues[imaxaxis + i], out DposStatus[i]);
                    float.TryParse(responseValues[imaxaxis * 2 + i], out MposStatus[i]);
                    int.TryParse(responseValues[imaxaxis * 3 + i], out AxisStatus[i]);
                }
            }
            return ret;
        }

        /// <summary>
        /// 设置BASIC自定义变量
        /// </summary>
        /// <param name="handle">连接句柄</param>
        /// <param name="varname">变量名称字符串</param>
        /// <param name="value">设定值</param>
        /// <returns>错误码</returns>
        public static int PMC_SetUserVar(IntPtr handle, string varname, int value)
        {
            return PMC_Execute(handle, string.Format("{0}={1}", varname, value), null, 0);
        }

        /// <summary>
        /// 设置BASIC自定义变量
        /// </summary>
        /// <param name="handle">连接句柄</param>
        /// <param name="varname">变量名称字符串</param>
        /// <param name="value">设定值</param>
        /// <returns>错误码</returns>
        public static int PMC_SetUserVar(IntPtr handle, string varname, float value)
        {
            return PMC_Execute(handle, string.Format("{0}={1}", varname, value), null, 0);
        }

        /// <summary>
        /// 读取BASIC自定义变量
        /// </summary>
        /// <param name="handle">连接句柄</param>
        /// <param name="varname">变量名称字符串</param>
        /// <param name="piValue">反馈值</param>
        /// <returns>错误码</returns>
        public static int PMC_GetUserVar(IntPtr handle, string varname, ref int piValue)
        {
            string response = string.Empty;
            int ret = getExecuteResponse(handle, "?" + varname, ref response);
            if (ret == ERR_OK)
            {
                int value = 0;
                int.TryParse(response, out value);
                piValue = value;
            }
            return ret;
        }

        /// <summary>
        /// 读取BASIC自定义变量
        /// </summary>
        /// <param name="handle">连接句柄</param>
        /// <param name="varname">变量名称字符串</param>
        /// <param name="pfValue">反馈值</param>
        /// <returns>错误码</returns>
        public static int PMC_GetUserVar(IntPtr handle, string varname, ref float pfValue)
        {
            string response = string.Empty;
            int ret = getExecuteResponse(handle, "?" + varname, ref response);
            if (ret == ERR_OK)
            {
                float value = 0;
                float.TryParse(response, out value);
                pfValue = value;
            }
            return ret;
        }

        /// <summary>
        /// 设置BASIC自定义全局数组
        /// </summary>
        /// <param name="handle">连接句柄</param>
        /// <param name="arrayname">全局数组名称</param>
        /// <param name="arraystart">数组起始元素</param>
        /// <param name="numes">设置数量</param>
        /// <param name="piValue">设定值</param>
        /// <returns>错误码</returns>
        public static int PMC_SetUserArray(IntPtr handle, string arrayname, int arraystart, int numes, int[] piValue)
        {
            string[] commands = new string[numes];
            for (int i = 0; i < numes; i++)
            {
                commands[i] = string.Format("{0}({1})={2}", arrayname, arraystart + i, piValue[i].ToString());
            }
            string command = string.Join("\n", commands);
            return PMC_Execute(handle, command, null, 0);
        }

        /// <summary>
        /// 设置BASIC自定义全局数组
        /// </summary>
        /// <param name="handle">连接句柄</param>
        /// <param name="arrayname">全局数组名称</param>
        /// <param name="arraystart">数组起始元素</param>
        /// <param name="numes">设置数量</param>
        /// <param name="pfValue">设定值</param>
        /// <returns>错误码</returns>
        public static int PMC_SetUserArray(IntPtr handle, string arrayname, int arraystart, int numes, float[] pfValue)
        {
            string[] commands = new string[numes];
            for (int i = 0; i < numes; i++)
            {
                commands[i] = string.Format("{0}({1})={2}", arrayname, arraystart + i, pfValue[i].ToString());
            }
            string command = string.Join("\n", commands);
            return PMC_Execute(handle, command, null, 0);
        }

        /// <summary>
        /// 读取BASIC自定义全局数组
        /// </summary>
        /// <param name="handle">连接句柄</param>
        /// <param name="arrayname">全局数组名称</param>
        /// <param name="arraystart">数组起始元素</param>
        /// <param name="numes">读取数量</param>
        /// <param name="piValue">反馈值</param>
        /// <returns>错误码</returns>
        public static int PMC_GetUserArray(IntPtr handle, string arrayname, int arraystart, int numes, int[] piValue)
        {
            string[] names = new string[numes];
            for (int i = 0; i < numes; i++)
            {
                names[i] = string.Format("{0}({1})", arrayname, arraystart + i);
            }

            string response = string.Empty;
            int ret = getExecuteResponse(handle, "?" + string.Join(",", names), ref response);
            if (ret == ERR_OK)
            {
                string[] responseValues = response.Split('\t');
                int num = Math.Min(numes, responseValues.Length);
                for (int i = 0; i < num; i++)
                {
                    int.TryParse(responseValues[i], out piValue[i]);
                }
            }
            return ret;
        }

        /// <summary>
        /// 读取BASIC自定义全局数组
        /// </summary>
        /// <param name="handle">连接句柄</param>
        /// <param name="arrayname">全局数组名称</param>
        /// <param name="arraystart">数组起始元素</param>
        /// <param name="numes">读取数量</param>
        /// <param name="pfValue">反馈值</param>
        /// <returns>错误码</returns>
        public static int PMC_GetUserArray(IntPtr handle, string arrayname, int arraystart, int numes, float[] pfValue)
        {
            string[] names = new string[numes];
            for (int i = 0; i < numes; i++)
            {
                names[i] = string.Format("{0}({1})", arrayname, arraystart + i);
            }

            string response = string.Empty;
            int ret = getExecuteResponse(handle, "?" + string.Join(",", names), ref response);
            if (ret == ERR_OK)
            {
                string[] responseValues = response.Split('\t');
                int num = Math.Min(numes, responseValues.Length);
                for (int i = 0; i < num; i++)
                {
                    float.TryParse(responseValues[i], out pfValue[i]);
                }
            }
            return ret;
        }
    }
}
